/*!
 * # 模块 Api 类:
 *  Management - 日历管理
 * 
 * # 描述:
 *  向管理员提供一个日历的管理界面。管理人员可以指定工作日、节假日或者为日期定义节日名称。
 *  
 *  Copyright (c), 上海沃恩信息科技有限公司.
 *  All rights reserved.
 *  Licensed under BSD (https://www.pittypat.work/bsd.html).
 */

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Pittypat;

namespace Waln.Calendar.Management
{
	/// <summary>
	/// 提供对模块 日历管理 中功能的封装和调用。
	/// </summary>
	[global::Pittypat.Module(global::Pittypat.ModulePresentation.UI, AllowAnonymous = false)]
	public sealed class Api : global::Pittypat.Module
	{
		#region DatesAsync

		/// <summary>
		/// 查询指定月份所有日期（从 1 号到 31 号）的列表。
		/// </summary>
		/// <param name="model">功能模型对象，其中包含了功能的参数列表、执行状态以及相关消息。</param>
		/// <param name="progress">跟踪和汇报异步操作的进度。</param>
		/// <returns>操作成功返回 日期列表，否则返回 null。</returns>
		public async global::System.Threading.Tasks.Task<global::Pittypat.IJson> DatesAsync(
			global::Pittypat.FunctionModel<Args.Dates> model, 
			global::Pittypat.IAsyncProgress progress)
		{
			// 执行数据操作
			await this.DataService.Exec(model, progress);

			// 如果操作成功，返回日期列表
			return model.Success ? model.Args.List : null;
		}

		#endregion

		#region SetWorkdayAsync

		/// <summary>
		/// 设置指定的日期，包括是否工作日或节假日，以及节日名称。
		/// </summary>
		/// <param name="model">功能模型对象，其中包含了功能的参数列表、执行状态以及相关消息。</param>
		/// <param name="progress">跟踪和汇报异步操作的进度。</param>
		/// <returns>操作成功返回 日期信息，否则返回 null。</returns>
		public async global::System.Threading.Tasks.Task<global::Pittypat.IJson> SetWorkdayAsync(
			global::Pittypat.FunctionModel<Args.SetWorkday> model, 
			global::Pittypat.IAsyncProgress progress)
		{
			// 执行数据操作
			await this.DataService.Exec(model, progress);

			// 如果操作成功，返回日期信息
			return model.Success ? model.Args.Date : null;
		}

		#endregion

		#region SetFestivalsAsync

		/// <summary>
		/// 设置指定日期的节日名称。
		/// </summary>
		/// <param name="model">功能模型对象，其中包含了功能的参数列表、执行状态以及相关消息。</param>
		/// <param name="progress">跟踪和汇报异步操作的进度。</param>
		/// <returns>操作成功返回 日期信息，否则返回 null。</returns>
		public async global::System.Threading.Tasks.Task<global::Pittypat.IJson> SetFestivalsAsync(
			global::Pittypat.FunctionModel<Args.SetFestivals> model, 
			global::Pittypat.IAsyncProgress progress)
		{
			// 执行数据操作
			await this.DataService.Exec(model, progress);

			// 如果操作成功，返回日期信息
			return model.Success ? model.Args.Date : null;
		}

		#endregion
	}
}
